package mygame;

import java.util.Random;
/**
 *
 * @author Paulo Júnior
 */
public class Combate
{
    private static final double lifeBar = 10.00;
    private static Random mRandom = new Random();
    
    /**
     * 
     * @param pLados Número de Lados do dado, numero de lados > 1
     * @return Retorna um número aleatório entre 1 e o número de lados
     * caso o número de lados seja <= 1, é retornado 0(zero)
     */
    public static int dado(int pLados)
    {
        return mRandom.nextInt(pLados)+1;
    }
    
    public static void combate(Personagem p1, Personagem p2)
    {
        String lMovimentos = "";
        Personagem lVez, lProx;
        int lDano;
        lVez = ( p1.getIniciativa() > p2.getIniciativa() ? p1 : p2);
        lProx = (lVez.equals(p1) ? p2 : p1);

        calculaVida(p1,p2);
        printResult(lVez.getNome() + " Começa Atacando");
        while(p1.estaVivo() && p2.estaVivo())
        {
            if(lVez.getPrecisao() >= lProx.getEsquiva())
            {
                printResult(lVez.getNome() + " Acertou o Golpe");
                lDano = lVez.getAtaque() - lProx.getDefesa();
                if(lDano > 0)
                {
                    lProx.perderSangue(lDano);
                    printResult(lProx.getNome() + " Perdeu " + lDano + " Pontos de Sangue");
                    calculaVida(p1,p2);
                }
                else
                {
                    printResult(lProx.getNome() + " Defendeu o Golpe");
                }
            }
            else
            {
                printResult(lVez.getNome() + " Errou o Golpe");
            }
                lVez = lProx;
                lProx = (lVez.equals(p1) ? p2 : p1);
        }

        printResult((p1.estaVivo() ? p1 : p2).getNome() + " Venceu o Combate e ganhou " + p2.geraExperiencia(p1.getLevel()) + " pontos de xp");
        
        p1.addExperiencia(p2.geraExperiencia(p1.getLevel()));
        
        
        
    }
    
    
    public static void printResult(String result){
        System.out.println(result);
    }
    
    
    
    public static void calculaVida(Personagem p1, Personagem p2){
        int i=0;
        String barralife = "";
        int life1 = (int)((double)p1.getSangueAtual() / (double)p1.getSangue()*lifeBar);
        int life2 = (int)((double)p2.getSangueAtual() / (double)p2.getSangue()*lifeBar);
        barralife += "P1[";
        for(i=0; i < lifeBar; i++) barralife +=(i<life1?"X":"0");
        barralife += "] vs P2[";
        for(i=0; i < lifeBar; i++) barralife +=(i<life2?"X":"0");
        barralife += "]";
        printResult(barralife);
        
    }
}
